﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpLearn_Chapter4.Method
{
    internal class Person
    {
        //声明方法/函数
        //1. 访问控制修饰
        //2. 返回值类型(任意的合法的类型)，void
        //3. 方法名（任意的合法的标识符，不能使用C#关键字）
        //4. 参数列表（任意参数）
        //(1)值类型参数
        //(2)引用类型参数
        //5. 方法体
        public int Add(int x,int y) { 
            return x+y; 
        }
    }

    class Test
    {
        //调用方法
        void CallMethod()
        {
            //定义Person类型变量p，并初始化
            Person p = new Person();
            //调用方法
            p.Add(1,2);
        }        
    }


    //example4-38
    class ValueParam
    {
        //值类型参数
        public void Add(int a, int b)
        {
            int sum;
            a = a * 2;
            b = b * b;
            sum = a + b;
            Console.WriteLine(sum);
        }

        

    }

    class ReferenceParam
    {
        //引用类型参数,数组
        public void ModifyArray(int[] arr)
        {
            arr[0] = 100;
            Console.WriteLine("调用方法");
        }
    }

    class OutParam
    {
        public void Divide(int a, int b, out int quotient,out int reminder)
        {
            quotient = a / b;
            reminder = b % a;
        }
    }

    class StaticMathodTest
    {
        public static int Add(int a, int b)
        {
            return a + b;
        }

        //构造方法
        public StaticMathodTest()
        {

        }
        //构造方法重载
        public StaticMathodTest(int a,int b)
        {

        }

        //析构方法,在对象被销毁时自动调用
        ~StaticMathodTest() { 
        
        }

        //重载方法
        public static int Add(int a, int b,int c)
        {
            return a + b+c;
        }

        public static float Add(float a, int b, int c)
        {
            return (float)(a + b + c);
        }
    }
}
